#include "ModuleColorDescriptors.h"

void ModuleColorDescriptors::init(QCVModuleHandlerInterface * parent)
{
	this->parent=parent;
	win=new QWidget();
	layout=new QVBoxLayout(win);
	mode=new QComboBox(win);
	mode->addItem("Histogramme (pas encore fait!)");
	mode->addItem("Descripteurs");

	layout->addWidget(mode);
	//hist.create(0,0);
	//desc.create(0,0);
}
////////////////////////////////////////////////////////////////////////////////
void ModuleColorDescriptors::free()
{
	delete win;
}
////////////////////////////////////////////////////////////////////////////////
cv::Mat & ModuleColorDescriptors::process()
{
	if(mode->currentIndex()==0)
	{
		hist.create(255,0);

		return hist;
	}
	else
	{
		desc.create(keyspoints.rows,3);
		
		for(int i=0;i<keyspoints.rows;i++)
		{
			//printf("%d %hu %hu %hu\n",i,image(keyspoints(1,i),keyspoints(0,i))[0],image(keyspoints(1,i),keyspoints(0,i))[1],image(keyspoints(1,i),keyspoints(0,i))[2]);
			desc(i,0)=image(keyspoints(i,0),keyspoints(i,1))[0];
			desc(i,1)=image(keyspoints(i,0),keyspoints(i,1))[1];
			desc(i,2)=image(keyspoints(i,0),keyspoints(i,1))[2];
		}
		
		return desc;	
	}
}
////////////////////////////////////////////////////////////////////////////////
void ModuleColorDescriptors::setInput(int n,const cv::Mat & m)
{
	if(n==0)
	{
		image=m.clone();
	}
	else
	{
		keyspoints=m.clone();
	}
}
////////////////////////////////////////////////////////////////////////////////
QWidget* ModuleColorDescriptors::widget()
{
	return win;
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleColorDescriptors::getName()
{
	return tr("Color Descripteurs");
}
////////////////////////////////////////////////////////////////////////////////
int ModuleColorDescriptors::nbInputs()
{
	return 1+(mode->currentIndex()==1);
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleColorDescriptors::help(int id)
{
	if(id==-2)
	{
		return tr("Module d'extraction de descripteurs de couleurs, l'image en entrée doit être une image couleur 3 canals");
	}
	else if(id==-1)
	{
		if(mode->currentIndex()==0)
		{
			return tr("histogramme");
		}
		else
		{
			return tr("descripteurs");
		}
	}
	else if(id==0)
	{
		return tr("image");
	}
	else if(id==1)
	{
		return tr("keyspoints");
	}
}
////////////////////////////////////////////////////////////////////////////////
bool ModuleColorDescriptors::setParams(QString params)
{
	QStringList params_list=params.split(";");
	
	if(params_list.size()==1)
	{
		mode->setCurrentIndex(params_list[0].toInt());
		return true;
	}
	else
	{
		return false;
	}
}
////////////////////////////////////////////////////////////////////////////////
QString ModuleColorDescriptors::getParams()
{
	return QString::number(mode->currentIndex());
}
////////////////////////////////////////////////////////////////////////////////
Q_EXPORT_PLUGIN2(ModuleColorDescriptors_plugin,ModuleColorDescriptors);
